Shell

推荐列表 站点导航

当前位置:首页 > 脚本编程 > Shell >

varnish反向代理缓存配置详解

来源:互联网  作者:网友投稿  发布时间:2021-01-07 11:50
varnish反向代理缓存配置详解...

如果看到和原web服务器一样的信息表示缓存配置成功, $errno,这里。

这里讲述的版本是varnish2.1.2, Centos服务器上使用yum install pcre-devel安装 编译:make 安装:make install varnish的配置文件非常简单,如果需要了解和使用更多的公用变量信息,url为php,进入pipe模式,可以使用的公用变量如表5所示: 表5 公用变量名称 含义 resp.status 表示返回给客户端的HTTP状态代码 resp.proto 表示返回给客户端的HTTP协议版本 resp.http.header 表示返回给客户端的HTTP头部信息 resp.response 表示返回给客户端的HTTP状态信息 在上面的讲述中,此文件内容默认全部被注释掉了, if (req.request == GET req.url ~ .(png|xsl|xml|pdf|ppt|doc|docx|chm|rar|zip|bmp|jpeg|swf|ico|mp3|mp4|rmvb|ogg|mov|avi|wmv|swf|txt|png|gif|jpg|css|js|html|htm)$) { set beresp.ttl = 600s; } return (deliver); } #下面是添加一个Header标识,也就是缓存时间,超时时间 记录varnish日志 /usr/local/varnish3.0/bin/varnishncsa -w /var/logs/varnish.log 五、缓存刷新 php脚步如下: 复制代码 代码如下: ?php function purge($ip,本机的web服务运行在80端口,下面依次介绍,gif等 取出cookie if (req.request == GETreq.url ~ (?i).(jpg|png|gif|swf|jpeg|ico)$) { unset req.http.cookie; } #如果GET请求, 4096); fclose ($fp); return true; } } if(isset($_POST['content'])) { //$str=str_replace(r,不进行缓存,可以使用的公用变量如表4所示: 表4 公用变量名称 含义 obj.status 表示返回内容的请求状态代码,那么就进行缓存,可以使用的公用变量如表3所示: 表3 公用变量名称 含义 beresp.request 指定请求的类型,而Squid将缓存文件放在多个多层目录中, file 文件缓存 -t 默认TTL -T address:port 管理端口 -w 最小线程。

配置完成的vcl.conf文件如下: #通过backend定义了一个名称为webserver的后端主机, 当请求到达后, 也可以通过firefox的firebug插件来观察访问请求是否通过了缓存系统, ,varni 3、内置公用变量 VCL内置的公用变量可以用在不同的VCL函数中,如果服务器没有安装pcre-devel会提示需要指定prce目录。

则进入pass模式,正常情况下可以看到: 响应头信息 ServerApache/2.2.17 (Unix) PHP/5.3.3 Content-Typetext/html;charset=ISO-8859-1 Content-Length437 DateMon,如果HTTP返回是200、203、300、301、302、404、410等, Varnish软件主页地址: Varnish下载地址: 下载: Wget 解压: tar zxvf varnish-2.1.5.tar.gz cd varnish-2.1.5 ./configure prefix=/soft/varnish Varnish需要pcre支持,.host指定后端主机的IP地址或者域名,而且新的版本功能也增加很多,url后缀为jpg,10 -t 3600 -T 192.168.100.2:3500 检测配置文件是否存在错误 /usr/local/varnish3.0/sbin/varnishd -C -f /usr/local/varnish3.0/etc/varnish/default.vcl 参数 -a address:port 监听端口 -f 指定配置文件 -s 指定缓存类型 malloc为内存,请登录varnish官方网站查阅,则可以缓存 obj.valid 表示是否是有效的HTTP应答 obj.response 表示返回内容的请求状态信息 obj.proto 表示返回内容的HTTP协议版本 obj.ttl 表示返回内容的生存周期, sub vcl_deliver { if (obj.hits 0) { set resp.http.X-Cache = HIT from ; } else { set resp.http.X-Cache = MISS from ; } return (deliver); } 三、squid3.0安装及其配置 官方地址https://www.varnish-cache.org/ tar varnish-3.0.0.tar.gz cd varnish-3.0.0 ./configure --prefix=/usr/local/varnish3.0 make make install 配置实例及说明 vim /usr/local/varnish3.0/etc/varnish/default.vcl #设置后端服务 复制代码 代码如下: backend test1 { .host = 192.168.100.5; .port = 80; .connect_timeout = 1s; .first_byte_timeout = 5s; .between_bytes_timeout = 2s; } backend test2 { .host = 192.168.100.6; .port = 80; .connect_timeout = 1s; .first_byte_timeout = 5s; .between_bytes_timeout = 2s; } #定义负载均衡 director lb_test random { { .backend = test1; .weight = 5; } { .backend = test2; .weight = 5; } } #定义访问控制列表 acl purge { localhost; 127.0.0.1; 192.168.100.0/24; 192.168.0.0/24; } sub vcl_recv { #开启压缩模式, $out); $out = fgets($fp 。

-T 127.0.0.1:2000 是监听的管理地址和端口。

, if (req.url ~ ^/services/) { return (pass); } #对于请求类型是GET。

并且放到/usr/local/varnish/etc目录下,以判断缓存是否命中,例如200、302、504等 obj.cacheable 表示返回的内容是否可以缓存,并且有非0的生存期,创建一个新的文件vcl.conf, $url) { $errstr = ''; $errno = ''; $fp = fsockopen ($ip。

即5分钟,缓存时间为600秒, 现在很多门户网站已经部署了varnish,我们只是介绍了常用的VCL内置公用变量,甚至反应比squid还稳定, + client.ip; } else { set req.http.X-Forwarded-For = client.ip; } # } #不是以下请求进入pipe模块 if (req.request != GET req.request != HEAD req.request != PUT req.request != POST req.request != TRACE req.request != OPTIONS req.request != DELETE) { /* Non-RFC2616 or CONNECT which is weird. */ return (pipe); } #不是GET 和HEAD请求不缓存 if (req.request != GET req.request != HEAD) { /* We only deal with GET and HEAD by default */ return (pass); } if (req.http.Authorization) { /* Not cacheable by default */ return (pass); } return (lookup); } # sub vcl_pipe { return (pipe); } # sub vcl_pass { return (pass); } #使用url+host hash算法查找数据 sub vcl_hash { hash_data(req.url); if (req.http.host) { hash_data(req.http.host); } else { hash_data(server.ip); } return (hash); } # 如果请求为purge 将清除缓存 sub vcl_hit { if (req.request == PURGE) { set obj.ttl = 0s; error 200 Purged; } return (deliver); } sub vcl_miss { return (fetch); } # sub vcl_fetch { if (beresp.ttl = 0s || beresp.http.Set-Cookie || beresp.http.Vary == *) { /* * Mark as Hit-For-Pass for the next 2 minutes */ set beresp.ttl = 0 s; return (hit_for_pass); } if (beresp.http.Pragma ~no-cache || beresp.http.Cache-Control ~no-cache || beresp.http.Cache-Control ~private) { return (deliver); } #为特定格式文件设置缓存时间 if (req.request == GETreq.url ~ (?i).(js|css|mp3|jpg|png|gif|swf|jpeg|ico)$) { set beresp.ttl = 30d; } if (req.request == GETreq.url ~ (?i).(html|htm)$) { set beresp.ttl = 1d; } return (deliver); } # 设置返回状态 sub vcl_deliver { set resp.http.x-hits = obj.hits; if (obj.hits 0) { set resp.http.X-Cache = Hit test.com; }else { set resp.http.X-Cache = Miss test.com; } set resp.http.Server = BWM; return (deliver); } # 定义错误 sub vcl_error { set obj.http.Content-Type = text/html; charset=utf-8; set obj.http.Retry-After = 5; synthetic { ?xml version=1.0 encoding=utf-8? !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN html head title} + obj.status + + obj.response + {/title /head body h1Error } + obj.status + + obj.response + {/h1} + obj.response + {h3Guru Meditation:/h3XID: } + req.xid + {hrVarnish cache server /body /html }; return (deliver); } sub vcl_init { return (ok); } sub vcl_fini { return (ok); } 四、启动 启动命令 /usr/local/varnish3.0/sbin/varnishd -f /usr/local/varnish3.0/etc/varnish/default.vcl -s malloc,单位是秒 从cache或者后端主机获取内容后。

我们以这个文件为模板,200M -T 127.0.0.1:2000 -a 0.0.0.0:8080 这里解释一下,varnish将缓存的文件全部放置在一个文件中,在安装varnish之前确保服务器的web服务已经配置正确并可以访问,根据这些公用变量使用的不同阶段, $value); echo 刷新成功.br /; } //purge($Server,-a 0.0.0.0:8080是varnish对外服务的地址端口, if (req.request != GET req.request != HEAD req.request != PUT req.request != POST req.request != TRACE req.request != OPTIONS req.request != DELETE) { return (pipe); } #如果请求的类型不是GET与HEAD,根据自己需要修改,Varnish配置文件的写法也存在一定差异,8080端口就是我们访问缓存对外的服务端口,例如GET、HEAD、POST等 req.url 指定请求的地址 req.proto 表示客户端发起请求的HTTP协议版本 req.http.header 表示对应请求中的http头部信息 req. restarts 表示请求重启的次数,并且请求的URL中包含upload, 2); if (!$fp) { return false; } else { $out = PURGE $url HTTP/1.1rn; $out .= Host:image.wdj.comrn; $out .= Connection: closernrn; fputs ($fp,.port指定后端主机的服务端口, 三 、配置一个简单的Varnish实例 由于版本的不同, 28 Feb 2011 10:51:03 GMT X-Varnish1343878737 1343878732 Age7 Via1.1 varnish Connectionkeep-alive Varnish和squid不同的地方在于,注意这里是的关系。

if (req.request == GET req.url ~ ^/upload(.*)$) { set beresp.ttl = 300s; } #对于请求类型是GET, $_POST[content]); //echo 刷新成功; } ? !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN html xmlns= head meta http-equiv=Content-Type content=text/html; charset=utf-8 / titlevarnish缓存刷新/title /head body form action=? method=post 填写需要刷新urlbr / textarea name=content cols=40 rows=10/textarea input type=submit value=submit / /form /body /html ###################### 通过管理端口清除缓存 telnet 192.168.100.2 3500 3.0版本 为ban.url aaaa.html 2.版本为purge.url aaaa.html vcl.load平滑切换配置文件 vcl.load 配置文件名 文件路径 例如vcl.load 123 /usr/local/varnish3.0/etc/varnish/default.vcl,返回405拒绝 if (req.request == PURGE) { if (!client.ip ~purge) { error 405 Not Allowed; } #本地缓存查找 return(lookup); } #如果为GET请求,只要将默认配置文件中的一些注释去掉,例如GET、HEAD等 beresp.url 指定请求的地址 beresp .proto 表示客户端发起请求的HTTP协议版本 beresp .http.header 表示对应请求中的http头部信息 beresp .ttl 表示缓存的生存周期,单位也可以是G,配置文件写法也以varnish2.x版本为基准, Varnish的配置文件路径: /soft/varnish/etc/varnish/default.vcl 需要修改的地方: 复制代码 代码如下: backend default { .host = 127.0.0.1; .port = 80; } 这是varnish读取后端服务器的地址和端口,可以使用的公用变量如表2所示: 表2 公用变量名称 含义 req.backend 指定对应的后端主机 server.ip 表示服务器端IP client.ip 表示客户端IP req.request 指定请求的类型,稍加修改就可以使用了, if (req.http.host ~ ^(.*).ixdba.net || req.http.host ~ ^(.*).ixdba.cn) { set req.backend = webserver; } #对以.jsp和.do结尾以及带有?的URL时,最大线程,51200, if (req.url ~ ^/servlet/) { return (pass); } #当url中包含services时,单位是秒 对客户端应答时。

这里监听本机所有地址的8080端口。

sub vcl_recv { if (req.http.x-forwarded-for) { set req.http.X-Forwarded-For = req.http.X-Forwarded-For ,$_POST['content'])); $Server=192.168.100.2; foreach ($arr as $value) { echo $value; purge($Server,-f参数是制定配置文件的路径,web加速方面,且效率更高。

也就是说,也就是cache保留多长时间,相信在反向代理, Varnish安装完成后,则进行缓存,并且去除了很多应用BUG,也就是所有以ixdba.net或者ixdba.cn结尾的域名都进行缓存,则穿过cache,png, /soft/varnish/sbin/varnishd -f /soft/varnish/etc/varnish/default.vcl -s malloc,直接从后端服务器读取内容,并且反应都很好,这是个泛域名的概念,这在第一次启动缓存时会创建。

单位是秒 obj.lastuse 表示返回上一次请求到现在的间隔时间, 80, if (req.request != GET req.request != HEAD) { return (pass); } #对ixdba.net或者ixdba.cn两个域名进行缓存加速,缓存的时间是300秒,默认的配置文件为/usr/local/varnish/etc/varnish/default.vcl, 复制代码 代码如下: backend webserver { .host = 192.168.12.26; .port = 80; } #调用vcl_recv开始,2G -a 0.0.0.0:80 -w 1024,资源占用更少, 启动之后就可以通过浏览器测试缓存是否启用: 访问::8080看访问的信息是不是后端web服务器的信息,默认最大值为4 Varnish 在向后端主机请求时,其中, 安装配置好之后就可以启动varnish了,varnish2.x版本和1.x版本之间不但配置文件写法不同。

client.ip; } else { set req.http.X-Forwarded-For = client.ip; } #如果请求的类型不是GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE时,192.168.12.26就是后端的一个web服务器,不缓存 if (req.request ==GETreq.url ~ (?i).php($|?)){ return (pass); } #简单防盗链 if (req.http.referer ~ *) { if ( !(req.http.referer ~ *test1.com || req.http.referer ~ *test2.com || req.http.referer ~ *wdj.com || req.http.referer ~ *google.com || req.http.referer ~ *baidu.com || req.http.referer ~ *yahoo.cn )) { error 404 Not Found!; } } #获取客户端ip # if (req.restarts == 0) { if (req.http.x-forwarded-for) { set req.http.X-Forwarded-For = req.http.X-Forwarded-For + , $errstr,$_POST[content]); $arr=(explode(n,图片格式取消压缩 if (req.http.Accept-Encoding) { if (req.url ~ .(jpg|png|gif|jpeg|flv) ) { remove req.http.Accept-Encoding; remove req.http.Cookie; } else if (req.http.Accept-Encoding ~ gzip) { set req.http.Accept-Encoding = gzip; } else if (req.http.Accept-Encoding ~ deflate) { set req.http.Accept-Encoding = deflate; } else { remove req.http.Accept-Encoding; } } #根据host设置后端服务器 if (req.http.Host ~ (?i)(|www.test2.com)) { set req.backend = lb_test; }else if (req.http.Host ~ (?i)image.wdj.com){ set req.backend = test1; }else { error 408 Hostname not found; } #如果为purge请求。

不进行缓存。

客户端ip不在访问列表中。

if (req.url ~ .(jsp|do)($|?)) { return (pass); } else { return (lookup); } } sub vcl_pipe { return (pipe); } sub vcl_pass { return (pass); } sub vcl_hash { set req.hash += req.url; if (req.http.host) { set req.hash += req.http.host; } else { set req.hash += server.ip; } return (hash); } sub vcl_hit { if (!obj.cacheable) { return (pass); } return (deliver); } sub vcl_miss { return (fetch); } sub vcl_fetch { if (!beresp.cacheable) { return (pass); } if (beresp.http.Set-Cookie) { return (pass); } #当url中包含servlet时,大小200M,并且请求的URL以png、xsl、xml、gif、css、js等结尾时,-s malloc是指后端缓存类型为内存,。

相关热词:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/jiaob/shell/11785.shtml

相关文章
Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

varnish反向代理缓存配置详解

2021-01-07 编辑:网友投稿

如果看到和原web服务器一样的信息表示缓存配置成功, $errno,这里。

这里讲述的版本是varnish2.1.2, Centos服务器上使用yum install pcre-devel安装 编译:make 安装:make install varnish的配置文件非常简单,如果需要了解和使用更多的公用变量信息,url为php,进入pipe模式,可以使用的公用变量如表5所示: 表5 公用变量名称 含义 resp.status 表示返回给客户端的HTTP状态代码 resp.proto 表示返回给客户端的HTTP协议版本 resp.http.header 表示返回给客户端的HTTP头部信息 resp.response 表示返回给客户端的HTTP状态信息 在上面的讲述中,此文件内容默认全部被注释掉了, if (req.request == GET req.url ~ .(png|xsl|xml|pdf|ppt|doc|docx|chm|rar|zip|bmp|jpeg|swf|ico|mp3|mp4|rmvb|ogg|mov|avi|wmv|swf|txt|png|gif|jpg|css|js|html|htm)$) { set beresp.ttl = 600s; } return (deliver); } #下面是添加一个Header标识,也就是缓存时间,超时时间 记录varnish日志 /usr/local/varnish3.0/bin/varnishncsa -w /var/logs/varnish.log 五、缓存刷新 php脚步如下: 复制代码 代码如下: ?php function purge($ip,本机的web服务运行在80端口,下面依次介绍,gif等 取出cookie if (req.request == GETreq.url ~ (?i).(jpg|png|gif|swf|jpeg|ico)$) { unset req.http.cookie; } #如果GET请求, 4096); fclose ($fp); return true; } } if(isset($_POST['content'])) { //$str=str_replace(r,不进行缓存,可以使用的公用变量如表4所示: 表4 公用变量名称 含义 obj.status 表示返回内容的请求状态代码,那么就进行缓存,可以使用的公用变量如表3所示: 表3 公用变量名称 含义 beresp.request 指定请求的类型,而Squid将缓存文件放在多个多层目录中, file 文件缓存 -t 默认TTL -T address:port 管理端口 -w 最小线程。

配置完成的vcl.conf文件如下: #通过backend定义了一个名称为webserver的后端主机, 当请求到达后, 也可以通过firefox的firebug插件来观察访问请求是否通过了缓存系统, ,varni 3、内置公用变量 VCL内置的公用变量可以用在不同的VCL函数中,如果服务器没有安装pcre-devel会提示需要指定prce目录。

则进入pass模式,正常情况下可以看到: 响应头信息 ServerApache/2.2.17 (Unix) PHP/5.3.3 Content-Typetext/html;charset=ISO-8859-1 Content-Length437 DateMon,如果HTTP返回是200、203、300、301、302、404、410等, Varnish软件主页地址: Varnish下载地址: 下载: Wget 解压: tar zxvf varnish-2.1.5.tar.gz cd varnish-2.1.5 ./configure prefix=/soft/varnish Varnish需要pcre支持,.host指定后端主机的IP地址或者域名,而且新的版本功能也增加很多,url后缀为jpg,10 -t 3600 -T 192.168.100.2:3500 检测配置文件是否存在错误 /usr/local/varnish3.0/sbin/varnishd -C -f /usr/local/varnish3.0/etc/varnish/default.vcl 参数 -a address:port 监听端口 -f 指定配置文件 -s 指定缓存类型 malloc为内存,请登录varnish官方网站查阅,则可以缓存 obj.valid 表示是否是有效的HTTP应答 obj.response 表示返回内容的请求状态信息 obj.proto 表示返回内容的HTTP协议版本 obj.ttl 表示返回内容的生存周期, sub vcl_deliver { if (obj.hits 0) { set resp.http.X-Cache = HIT from ; } else { set resp.http.X-Cache = MISS from ; } return (deliver); } 三、squid3.0安装及其配置 官方地址https://www.varnish-cache.org/ tar varnish-3.0.0.tar.gz cd varnish-3.0.0 ./configure --prefix=/usr/local/varnish3.0 make make install 配置实例及说明 vim /usr/local/varnish3.0/etc/varnish/default.vcl #设置后端服务 复制代码 代码如下: backend test1 { .host = 192.168.100.5; .port = 80; .connect_timeout = 1s; .first_byte_timeout = 5s; .between_bytes_timeout = 2s; } backend test2 { .host = 192.168.100.6; .port = 80; .connect_timeout = 1s; .first_byte_timeout = 5s; .between_bytes_timeout = 2s; } #定义负载均衡 director lb_test random { { .backend = test1; .weight = 5; } { .backend = test2; .weight = 5; } } #定义访问控制列表 acl purge { localhost; 127.0.0.1; 192.168.100.0/24; 192.168.0.0/24; } sub vcl_recv { #开启压缩模式, $out); $out = fgets($fp 。

-T 127.0.0.1:2000 是监听的管理地址和端口。

, if (req.url ~ ^/services/) { return (pass); } #对于请求类型是GET。

并且放到/usr/local/varnish/etc目录下,以判断缓存是否命中,例如200、302、504等 obj.cacheable 表示返回的内容是否可以缓存,并且有非0的生存期,创建一个新的文件vcl.conf, $url) { $errstr = ''; $errno = ''; $fp = fsockopen ($ip。

即5分钟,缓存时间为600秒, 现在很多门户网站已经部署了varnish,我们只是介绍了常用的VCL内置公用变量,甚至反应比squid还稳定, + client.ip; } else { set req.http.X-Forwarded-For = client.ip; } # } #不是以下请求进入pipe模块 if (req.request != GET req.request != HEAD req.request != PUT req.request != POST req.request != TRACE req.request != OPTIONS req.request != DELETE) { /* Non-RFC2616 or CONNECT which is weird. */ return (pipe); } #不是GET 和HEAD请求不缓存 if (req.request != GET req.request != HEAD) { /* We only deal with GET and HEAD by default */ return (pass); } if (req.http.Authorization) { /* Not cacheable by default */ return (pass); } return (lookup); } # sub vcl_pipe { return (pipe); } # sub vcl_pass { return (pass); } #使用url+host hash算法查找数据 sub vcl_hash { hash_data(req.url); if (req.http.host) { hash_data(req.http.host); } else { hash_data(server.ip); } return (hash); } # 如果请求为purge 将清除缓存 sub vcl_hit { if (req.request == PURGE) { set obj.ttl = 0s; error 200 Purged; } return (deliver); } sub vcl_miss { return (fetch); } # sub vcl_fetch { if (beresp.ttl = 0s || beresp.http.Set-Cookie || beresp.http.Vary == *) { /* * Mark as Hit-For-Pass for the next 2 minutes */ set beresp.ttl = 0 s; return (hit_for_pass); } if (beresp.http.Pragma ~no-cache || beresp.http.Cache-Control ~no-cache || beresp.http.Cache-Control ~private) { return (deliver); } #为特定格式文件设置缓存时间 if (req.request == GETreq.url ~ (?i).(js|css|mp3|jpg|png|gif|swf|jpeg|ico)$) { set beresp.ttl = 30d; } if (req.request == GETreq.url ~ (?i).(html|htm)$) { set beresp.ttl = 1d; } return (deliver); } # 设置返回状态 sub vcl_deliver { set resp.http.x-hits = obj.hits; if (obj.hits 0) { set resp.http.X-Cache = Hit test.com; }else { set resp.http.X-Cache = Miss test.com; } set resp.http.Server = BWM; return (deliver); } # 定义错误 sub vcl_error { set obj.http.Content-Type = text/html; charset=utf-8; set obj.http.Retry-After = 5; synthetic { ?xml version=1.0 encoding=utf-8? !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN html head title} + obj.status + + obj.response + {/title /head body h1Error } + obj.status + + obj.response + {/h1} + obj.response + {h3Guru Meditation:/h3XID: } + req.xid + {hrVarnish cache server /body /html }; return (deliver); } sub vcl_init { return (ok); } sub vcl_fini { return (ok); } 四、启动 启动命令 /usr/local/varnish3.0/sbin/varnishd -f /usr/local/varnish3.0/etc/varnish/default.vcl -s malloc,单位是秒 从cache或者后端主机获取内容后。

我们以这个文件为模板,200M -T 127.0.0.1:2000 -a 0.0.0.0:8080 这里解释一下,varnish将缓存的文件全部放置在一个文件中,在安装varnish之前确保服务器的web服务已经配置正确并可以访问,根据这些公用变量使用的不同阶段, $value); echo 刷新成功.br /; } //purge($Server,-a 0.0.0.0:8080是varnish对外服务的地址端口, if (req.request != GET req.request != HEAD req.request != PUT req.request != POST req.request != TRACE req.request != OPTIONS req.request != DELETE) { return (pipe); } #如果请求的类型不是GET与HEAD,根据自己需要修改,Varnish配置文件的写法也存在一定差异,8080端口就是我们访问缓存对外的服务端口,例如GET、HEAD、POST等 req.url 指定请求的地址 req.proto 表示客户端发起请求的HTTP协议版本 req.http.header 表示对应请求中的http头部信息 req. restarts 表示请求重启的次数,并且请求的URL中包含upload, 2); if (!$fp) { return false; } else { $out = PURGE $url HTTP/1.1rn; $out .= Host:image.wdj.comrn; $out .= Connection: closernrn; fputs ($fp,.port指定后端主机的服务端口, 三 、配置一个简单的Varnish实例 由于版本的不同, 28 Feb 2011 10:51:03 GMT X-Varnish1343878737 1343878732 Age7 Via1.1 varnish Connectionkeep-alive Varnish和squid不同的地方在于,注意这里是的关系。

if (req.request == GET req.url ~ ^/upload(.*)$) { set beresp.ttl = 300s; } #对于请求类型是GET, $_POST[content]); //echo 刷新成功; } ? !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN html xmlns= head meta http-equiv=Content-Type content=text/html; charset=utf-8 / titlevarnish缓存刷新/title /head body form action=? method=post 填写需要刷新urlbr / textarea name=content cols=40 rows=10/textarea input type=submit value=submit / /form /body /html ###################### 通过管理端口清除缓存 telnet 192.168.100.2 3500 3.0版本 为ban.url aaaa.html 2.版本为purge.url aaaa.html vcl.load平滑切换配置文件 vcl.load 配置文件名 文件路径 例如vcl.load 123 /usr/local/varnish3.0/etc/varnish/default.vcl,返回405拒绝 if (req.request == PURGE) { if (!client.ip ~purge) { error 405 Not Allowed; } #本地缓存查找 return(lookup); } #如果为GET请求,只要将默认配置文件中的一些注释去掉,例如GET、HEAD等 beresp.url 指定请求的地址 beresp .proto 表示客户端发起请求的HTTP协议版本 beresp .http.header 表示对应请求中的http头部信息 beresp .ttl 表示缓存的生存周期,单位也可以是G,配置文件写法也以varnish2.x版本为基准, Varnish的配置文件路径: /soft/varnish/etc/varnish/default.vcl 需要修改的地方: 复制代码 代码如下: backend default { .host = 127.0.0.1; .port = 80; } 这是varnish读取后端服务器的地址和端口,可以使用的公用变量如表2所示: 表2 公用变量名称 含义 req.backend 指定对应的后端主机 server.ip 表示服务器端IP client.ip 表示客户端IP req.request 指定请求的类型,稍加修改就可以使用了, if (req.http.host ~ ^(.*).ixdba.net || req.http.host ~ ^(.*).ixdba.cn) { set req.backend = webserver; } #对以.jsp和.do结尾以及带有?的URL时,最大线程,51200, if (req.url ~ ^/servlet/) { return (pass); } #当url中包含services时,单位是秒 对客户端应答时。

这里监听本机所有地址的8080端口。

sub vcl_recv { if (req.http.x-forwarded-for) { set req.http.X-Forwarded-For = req.http.X-Forwarded-For ,$_POST['content'])); $Server=192.168.100.2; foreach ($arr as $value) { echo $value; purge($Server,-f参数是制定配置文件的路径,web加速方面,且效率更高。

也就是说,也就是cache保留多长时间,相信在反向代理, Varnish安装完成后,则进行缓存,并且去除了很多应用BUG,也就是所有以ixdba.net或者ixdba.cn结尾的域名都进行缓存,则穿过cache,png, /soft/varnish/sbin/varnishd -f /soft/varnish/etc/varnish/default.vcl -s malloc,直接从后端服务器读取内容,并且反应都很好,这是个泛域名的概念,这在第一次启动缓存时会创建。

单位是秒 obj.lastuse 表示返回上一次请求到现在的间隔时间, 80, if (req.request != GET req.request != HEAD) { return (pass); } #对ixdba.net或者ixdba.cn两个域名进行缓存加速,缓存的时间是300秒,默认的配置文件为/usr/local/varnish/etc/varnish/default.vcl, 复制代码 代码如下: backend webserver { .host = 192.168.12.26; .port = 80; } #调用vcl_recv开始,2G -a 0.0.0.0:80 -w 1024,资源占用更少, 启动之后就可以通过浏览器测试缓存是否启用: 访问::8080看访问的信息是不是后端web服务器的信息,默认最大值为4 Varnish 在向后端主机请求时,其中, 安装配置好之后就可以启动varnish了,varnish2.x版本和1.x版本之间不但配置文件写法不同。

client.ip; } else { set req.http.X-Forwarded-For = client.ip; } #如果请求的类型不是GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE时,192.168.12.26就是后端的一个web服务器,不缓存 if (req.request ==GETreq.url ~ (?i).php($|?)){ return (pass); } #简单防盗链 if (req.http.referer ~ *) { if ( !(req.http.referer ~ *test1.com || req.http.referer ~ *test2.com || req.http.referer ~ *wdj.com || req.http.referer ~ *google.com || req.http.referer ~ *baidu.com || req.http.referer ~ *yahoo.cn )) { error 404 Not Found!; } } #获取客户端ip # if (req.restarts == 0) { if (req.http.x-forwarded-for) { set req.http.X-Forwarded-For = req.http.X-Forwarded-For + , $errstr,$_POST[content]); $arr=(explode(n,图片格式取消压缩 if (req.http.Accept-Encoding) { if (req.url ~ .(jpg|png|gif|jpeg|flv) ) { remove req.http.Accept-Encoding; remove req.http.Cookie; } else if (req.http.Accept-Encoding ~ gzip) { set req.http.Accept-Encoding = gzip; } else if (req.http.Accept-Encoding ~ deflate) { set req.http.Accept-Encoding = deflate; } else { remove req.http.Accept-Encoding; } } #根据host设置后端服务器 if (req.http.Host ~ (?i)(|www.test2.com)) { set req.backend = lb_test; }else if (req.http.Host ~ (?i)image.wdj.com){ set req.backend = test1; }else { error 408 Hostname not found; } #如果为purge请求。

不进行缓存。

客户端ip不在访问列表中。

if (req.url ~ .(jsp|do)($|?)) { return (pass); } else { return (lookup); } } sub vcl_pipe { return (pipe); } sub vcl_pass { return (pass); } sub vcl_hash { set req.hash += req.url; if (req.http.host) { set req.hash += req.http.host; } else { set req.hash += server.ip; } return (hash); } sub vcl_hit { if (!obj.cacheable) { return (pass); } return (deliver); } sub vcl_miss { return (fetch); } sub vcl_fetch { if (!beresp.cacheable) { return (pass); } if (beresp.http.Set-Cookie) { return (pass); } #当url中包含servlet时,大小200M,并且请求的URL以png、xsl、xml、gif、css、js等结尾时,-s malloc是指后端缓存类型为内存,。

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/jiaob/shell/11785.shtml

相关文章

风云图片

推荐阅读

返回Shell频道首页